package com.shujia.day05;

/*
    我们按照今天说的类和对象的知识，创建了一个Person对象，并且也成功赋值了姓名和年龄
    但是我们可以赋值一些不合实际的数值，这是不应该出现，所以我们应该在赋值之前，要先判断一下要赋的值是否合理
    既然是加判断，就不是一句话可以搞定的，我们可以定义一个方法，使用方法对成员变量赋值
    我们确实可以通过加一个方法来对成员变量进行赋值，但是谁规定了我必须要用这个方法呢？我们依旧可以使用原来的方式进行赋值
    我们如果可以通过一些手段，让外界无法直接获取成员变量，这样就不得不使用方法进行赋值了。
    java提供一个关键字给我们使用：private 私有的

    private关键字：
        可以修饰成员变量，成员方法，构造方法
        在同一个类中，private关键字不起作用，相当于透明的，同一个类中被private关键字修饰的成员可以随意访问


    说到现在，其实说的就是面向对象编程三大特征之一：封装
    封装： 使用private关键字将类中细节进行隐藏，只对外提供公共的访问方式。

    一个标准类的写法：最终是4.0版本
        1.0版本的写法：使用private关键字修饰成员变量
        类：
            成员变量：使用private关键字修饰
            成员方法：针对每一个成员变量提供对应公共的setXxx()和getXxx()



 */
class Person {
    private String name;
    private int age;

    public String getName(){
        return name;
    }

    public void setName(String n){
        name = n;
    }

    public int getAge(){
        return age;
    }

    public void setAge(int i) {
        if (i > 0 && i <= 130) {
            age = i;
        }else {
            System.out.println("输入的年龄不合实际！");
        }
    }

    private void fun1(){
        System.out.println("好好学习，天天向上！");
    }

    public void show1(){
        fun1();
    }
}

public class PersonDemo {
    public static void main(String[] args) {
        //创建一个Person类的对象
        Person p1 = new Person();
//        System.out.println("姓名：" + p1.name);
//        System.out.println("年龄：" + p1.age);
        System.out.println("姓名：" + p1.getName());
        System.out.println("年龄：" + p1.getAge());
        System.out.println("-------------------------");
//        p1.name = "江川";
//        p1.age = 1800;
        p1.setAge(1800);
        p1.setName("江川");
//        System.out.println("姓名：" + p1.name);
//        System.out.println("年龄：" + p1.age);
        System.out.println("姓名：" + p1.getName());
        System.out.println("年龄：" + p1.getAge());
        System.out.println("------------------------");
//        p1.fun1();
        p1.show1();
    }
}
